home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / source / dumpbmhd.lha / dumpBMHD.c next >
Encoding:
C/C++ Source or Header  |  1993-06-02  |  3.3 KB  |  118 lines

  1. #include <iff.h>
  2. #include <graphics/view.h>
  3. #include <stdio.h>
  4.  
  5.  
  6. const char amiga_version[] = "\0$VER: dumpBMHD 1.0";
  7.  
  8.  
  9. const char *maskmode[] = { "None", "HasMask", "HasTransparentColor", "Lasso" };
  10. const char *cprmode[]  = { "None", "ByteRun1" };
  11. #define UNKNOWN     (const char *)"Unknown"
  12. #define MASKTABSZ   sizeof(maskmode)/sizeof(const char *)
  13. #define CPRTABSZ    sizeof(cprmode)/sizeof(const char *)
  14.  
  15. const struct vmodestruct {
  16.     USHORT mode;
  17.     const char *name;
  18. } viewmode[] = {
  19.     { GENLOCK_VIDEO  , "GENLOCK_VIDEO"   },
  20.     { LACE           , "LACE"            },
  21.     { DOUBLESCAN     , "DOUBLESCAN"      },
  22.     { SUPERHIRES     , "SUPERHIRES"      },
  23.     { PFBA           , "PFBA"            },
  24.     { EXTRA_HALFBRITE, "EXTRA_HALFBRITE" },
  25.     { GENLOCK_AUDIO  , "GENLOCK_AUDIO"   },
  26.     { DUALPF         , "DUALPF"          },
  27.     { HAM            , "HAM"             },
  28.     { EXTENDED_MODE  , "EXTENDED_MODE"   },
  29.     { VP_HIDE        , "VP_HIDE"         },
  30.     { SPRITES        , "SPRITES"         },
  31.     { HIRES          , "HIRES"           }
  32. };
  33. #define VMTABSZ     sizeof(viewmode)/sizeof(struct vmodestruct)
  34.  
  35.  
  36. void dumpBMHD(filename)
  37.     char *filename;
  38. {
  39.     IFFL_HANDLE ifh;
  40.     struct IFFL_BMHD *bmhd;
  41.     ULONG *camg;
  42.  
  43.     if( ifh = IFFL_OpenIFF(filename, IFFL_MODE_READ) ) {
  44.  
  45.         printf("\nFile: %s\n\n", filename);
  46.  
  47.         if( bmhd = IFFL_GetBMHD(ifh) ) {
  48.             int x;
  49.  
  50.             printf("width: %d    height: %d\n", bmhd->w, bmhd->h);
  51.             printf("pixel position  x: %d    y: %d\n", bmhd->x, bmhd->y);
  52.             printf("planes: %d\n", bmhd->nPlanes);
  53.  
  54.             x = bmhd->masking;
  55.             printf("masking: %s (%d)\n", x < MASKTABSZ ? maskmode[x] : UNKNOWN, x);
  56.             x = bmhd->compression;
  57.             printf("compression: %s (%d)\n", x < CPRTABSZ ? cprmode[x] : UNKNOWN, x);
  58.  
  59.             printf("transparent color: %d\n", bmhd->transparentColor);
  60.             printf("xAspect: %d    yAspect: %d\n", bmhd->xAspect, bmhd->yAspect);
  61.             printf("pageWidth: %d    pageHeight: %d\n", bmhd->pageWidth, bmhd->pageHeight);
  62.         }
  63.         else
  64.             printf("no BMHD chunk found\n");
  65.  
  66.         if( camg = IFFL_FindChunk(ifh, ID_CAMG) ) {
  67.             camg++;
  68.             if( *camg == 4 ) {
  69.                 ULONG id;
  70.                 id = *++camg & 0x0000ffff;
  71.                 int i;
  72.  
  73.                 printf("\nViewModes (lower word): 0x%04lx =", id);
  74.  
  75.                 for( i = 0; i < VMTABSZ; i++ ) {
  76.                     if( id & viewmode[i].mode ) {
  77.                         printf(" %s", viewmode[i].name);
  78.                         id &= ~viewmode[i].mode;
  79.                     }
  80.                 }
  81.                 if( id )
  82.                     printf(" 0x%04lx\n", id);
  83.                 printf("\n");
  84.  
  85.                 id = (*camg & 0xffff0000) >> 16;
  86.                 printf("ViewModes (upper word): 0x%04lx\n", id);
  87.             }
  88.             else
  89.                 printf("\nError reading CAMG chunk: chunksize %d ??\n", *camg);
  90.         }
  91.         else
  92.             printf("\nno CAMG chunk found\n");
  93.  
  94.         IFFL_CloseIFF(ifh);
  95.     }
  96.     else
  97.         printf("\ncannot open %s\n", filename);
  98.  
  99.     printf("\n\n");
  100. }
  101.  
  102.  
  103. main(argc, argv)
  104.     int argc;
  105.     char *argv[];
  106. {
  107.     int i;
  108.  
  109.     if( argc > 1) {
  110.         for( i = 1; i < argc; i++ ) {
  111.             dumpBMHD(argv[i]);
  112.         }
  113.     }
  114.     else
  115.         printf("usage: %s <ilbm-files>\n", argv[0]);
  116. }
  117.  
  118.